上一篇 Day18 把「AI 輸出格式穩不穩」這關過了,這篇要面對一個更根本的問題:就算格式對了、AI 講得有條有理,內容本身就一定可信嗎?
先回頭看:這篇到底想確認什麼?
Day18 解決的是「AI 的回覆是不是程式讀得懂的 JSON」。但格式對了,還有一個問題:菜單裡的數字,對不對得起來? 我們的菜單生成流程是這樣:
所以這篇真正要確認的是:AI 給的份數,跟我們用 Food DB 的真實資料算出來的份數,是同一個數字嗎?加總之後,對得上目標嗎? 答案是:不一定。為什麼不一定?要先理解兩個觀念——幻覺,和不可重現性。
什麼是 Hallucination?
Hallucination(幻覺)是生成式 AI 一個廣為人知的特性:模型有時會生成「聽起來很合理、講得很有自信,但實際上是錯的或編造的」內容,而且它自己不會發現這是錯的。這篇想用整個開發過程中真實發生的案例,講清楚這條界線在實務上到底防住了什麼。
先釐清一個常見誤解:Hallucination 不是單純「AI 比較笨、算錯數字」。這裡其實藏著兩件不同但相關的事,我們拆開來講:
觀念 1:幻覺——它編造了「聽起來很合理、實際上是錯的」內容
例如請 AI 估一個飯糰的營養,它可能自信地給出「熱量 150 大卡、全穀雜糧 1 份」,但這個數字是它憑印象「接龍」出來的,不是查來的(示意例子)。而且它自己不會發現自己錯了。這是「這次的答案可能是錯的」。
觀念 2:不可重現性——同一個問題問兩次,答案可能不一樣
因為 LLM 是逐字接龍、生成時帶有隨機性,同一份輸入,第一次和第二次的結果可能微妙地不同。這是「就算這次剛好對,下次也不保證一樣」。
**兩者的關係:**幻覺是「這次可能錯」,不可重現性是「就算這次對了也不能保證下次一樣」。兩個加在一起,就是「不能拿 AI 的數字當最終答案」的原因。這對聊天機器人沒關係,但對「這個人今天該吃多少蛋白質」這種數字,是不能接受的。
對比看看不可重現性:用計算機對比
| 計算機(程式碼) | AI(LLM) | |
|---|---|---|
| 輸入 150 × 0.2 | 每次都是 30 | 這次 30,下次可能 29.5 或 32 |
| 同一題問兩次 | 答案一樣 | 答案可能微妙地不同 |
| 為什麼 | 照固定公式算 | 在「接龍」,每次逐字挑最可能的字,帶隨機性 |
用專案裡的情境:同一位使用者、同一份輸入,請 AI 估「蕃茄吉士蛋堡」的營養,今天它說蔬菜 0.5 份,明天可能說 0.3 份或 1 份,而且每個答案聽起來都很有自信。這比「算錯」更麻煩,因為算錯可以靠教它、改 prompt 來修,不穩定卻是 LLM 生成方式本身的特性,沒辦法完全消除。
這個專案把 Food DB(近 2000 筆真實食物)接進菜單生成流程後,這條鐵律被真實驗證了好幾次:
這幾個案例的共通點:AI 給出的答案「聽起來都很合理」,錯誤不會讓人一眼看穿,只有拿真實資料回頭核對,才會發現數字不對。這正是 hallucination 最麻煩的地方——它不是明顯的胡言亂語,是「看起來對、細究才發現錯」的那種錯。
這個專案的防線,不是「叫 AI 小心一點」,是結構性地不給它算錯的機會:
AI 選完食物後,程式碼一律重新用食物代換表公式精確計算一次,覆蓋掉 AI 自己的估算;生成完菜單後,還有兩層驗證(緩衝餐機制補足份數落差、超支偵測抓超支重試)。換句話說,不是相信 AI 這次答對了,而是不管它答什麼,最後呈現給使用者的數字,永遠是程式碼算出來、可以重現、可以驗證的那個版本。
這條界線劃在這裡,效果不是「讓 AI 變聰明」,是「讓系統整體的正確性不依賴 AI 那次到底表現好不好」——這才是把生成式 AI 用進一個「數字不能出錯」的產品裡,真正該有的態度。到這裡,Part 4 把「AI 該做什麼、不該做什麼、怎麼溝通、怎麼確保輸出可用、為什麼還是不能完全信任它」這條線走完了。下一部分要處理的是另一個更大的現實問題:AI 最大的挑戰其實不是 AI 本身,而是餵給它的資料夠不夠好。